home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / kernel / dbg / ds3100.md / dbg.h < prev    next >
C/C++ Source or Header  |  1992-12-18  |  6KB  |  233 lines

  1. /*
  2.  * dbg.h --
  3.  *
  4.  *    Exported types and procedure headers for the debugger module.
  5.  *
  6.  *    Copyright (C) 1989 Digital Equipment Corporation.
  7.  *    Permission to use, copy, modify, and distribute this software and
  8.  *    its documentation for any purpose and without fee is hereby granted,
  9.  *    provided that the above copyright notice appears in all copies.
  10.  *    Digital Equipment Corporation makes no representations about the
  11.  *    suitability of this software for any purpose.  It is provided "as is"
  12.  *    without express or implied warranty.
  13.  *
  14.  * $Header: /cdrom/src/kernel/Cvsroot/kernel/dbg/ds3100.md/dbg.h,v 9.4 91/08/09 16:27:25 jhh Exp $ SPRITE (Berkeley)
  15.  */
  16.  
  17. #ifndef _DBG
  18. #define _DBG
  19.  
  20. #include <sprite.h>
  21. #ifdef KERNEL
  22. #include <machTypes.h>
  23. #else
  24. #include <kernel/machTypes.h>
  25. #endif
  26.  
  27. /*
  28.  * Variable to indicate if are using the rs232 debugger or the network debugger.
  29.  */
  30. extern    Boolean    dbg_Rs232Debug;
  31.  
  32. /*
  33.  * Variable to indicate that dbg wants a packet.
  34.  */
  35. extern    Boolean    dbg_UsingNetwork;
  36.  
  37. /*
  38.  * Variable that indicates that we are under control of the debugger.
  39.  */
  40. extern    Boolean    dbg_BeingDebugged;
  41.  
  42. /*
  43.  * Variable that indicates that we are in the debugger command loop.
  44.  */
  45. extern    Boolean    dbg_InDebugger;
  46.  
  47. /*
  48.  * The maximum stack address.
  49.  */
  50. extern    int    dbgMaxStackAddr;
  51.  
  52. /*
  53.  * Debugger using syslog to dump output of call command or not.
  54.  */
  55. extern    Boolean    dbg_UsingSyslog;
  56.  
  57. /*
  58.  * The different opcodes that kdbx can send us.
  59.  */
  60.  
  61. #define    DBG_READ_ALL_REGS    1    /* Read all the  registers */
  62. #define    DBG_WRITE_REG    2    /* Write one a register */
  63. #define    DBG_CONTINUE        3    /* Continue execution */
  64. #define    DBG_SINGLESTEP    4    /* Single step execution */
  65. #define    DBG_DETACH        5    /* Detach from the debugger */
  66. #define    DBG_INST_READ    6    /* Read an instruction */
  67. #define    DBG_INST_WRITE    7    /* Write an instruction */
  68. #define    DBG_DATA_READ    8    /* Read data */
  69. #define    DBG_DATA_WRITE    9    /* Write data */
  70. #define    DBG_SET_PID        10    /* Set the process for which the stack
  71.                      * back trace is to be done. */
  72. #define    DBG_GET_STOP_INFO    11    /* Get all info needed by dbx after 
  73.                      *it stops. */
  74. #define    DBG_GET_VERSION_STRING 12    /* Return the version string. */
  75. #define    DBG_DIVERT_SYSLOG    13    /* Divert syslog to the console. */
  76. #define    DBG_REBOOT        14    /* Call the reboot routine. */
  77. #define    DBG_BEGIN_CALL    15    /* Start a call. */
  78. #define    DBG_END_CALL        16    /* Clean up after a call completes. */
  79. #define    DBG_CALL_FUNCTION    17    /* Call a function. */
  80. #define    DBG_GET_DUMP_BOUNDS    18    /* Get bounds for the dump program. */
  81. #define    DBG_UNKNOWN        19    /* Used for error checking */
  82.  
  83. typedef int Dbg_Opcode;
  84.  
  85. #define    DBG_OPCODE_NAMES {                    \
  86.     "UNUSED",                        \
  87.     "Read all regs",                    \
  88.     "Write reg",                        \
  89.     "Continue",                        \
  90.     "Single Step",                        \
  91.     "Detach",                        \
  92.     "Inst Read",                        \
  93.     "Inst Write",                        \
  94.     "Data Read",                        \
  95.     "Data Write",                        \
  96.     "Process to walk stack for",                \
  97.     "Read information after stopped",            \
  98.     "Return version string",                \
  99.     "Divert syslog to the console",                \
  100.     "Reboot the machine",                    \
  101.     "Set up things to start a call command",        \
  102.     "Clean up things after a call command has executed",    \
  103.     "Call a function",                    \
  104.     "Get bounds for the dump program",            \
  105.     "UNKNOWN OPCODE"                    \
  106. }                                
  107.  
  108. typedef struct {
  109.     int    regNum;
  110.     int    regVal;
  111. } Dbg_WriteReg;
  112.  
  113. typedef struct {
  114.     int        address;
  115.     int        numBytes;
  116.     char    buffer[100];
  117. } Dbg_WriteMem;
  118.  
  119. typedef Dbg_WriteMem Dbg_CallFunc;
  120.  
  121. typedef struct {
  122.     int        address;
  123.     int        numBytes;
  124. } Dbg_ReadMem;
  125.  
  126. typedef struct {
  127.     int        stringLength;
  128.     char    string[100];
  129. } Dbg_Reboot;
  130.  
  131. typedef enum {
  132.     DBG_SYSLOG_TO_ORIG,
  133.     DBG_SYSLOG_TO_CONSOLE,
  134. } Dbg_SyslogCmd;
  135.  
  136. typedef struct {
  137.     unsigned int    pageSize;
  138.     unsigned int    stackSize;
  139.     unsigned int    kernelCodeStart;
  140.     unsigned int    kernelCodeSize;
  141.     unsigned int    kernelDataStart;
  142.     unsigned int    kernelDataSize;
  143.     unsigned int    kernelStacksStart;
  144.     unsigned int    kernelStacksSize;
  145.     unsigned int    fileCacheStart;
  146.     unsigned int    fileCacheSize;
  147. } Dbg_DumpBounds;
  148.  
  149. /*
  150.  * Message format.
  151.  */
  152. typedef struct {
  153.     int        opcode;
  154.     union {
  155.     int        pid;
  156.     Dbg_WriteReg    writeReg;
  157.     Dbg_WriteMem    writeMem;
  158.     Dbg_CallFunc    callFunc;
  159.     Dbg_ReadMem    readMem;
  160.     int        pc;
  161.     Dbg_SyslogCmd    syslogCmd;
  162.     Dbg_Reboot    reboot;
  163.     } data;
  164. } Dbg_Msg;
  165.  
  166. #define    DBG_MAX_REPLY_SIZE    1400
  167. #define    DBG_MAX_REQUEST_SIZE    1400
  168.  
  169. /*
  170.  * The UDP port number that the kernel and kdbx use to identify a packet as
  171.  * a debugging packet.  (composed from "uc": 0x75 = u, 0x63 = c)
  172.  */
  173.  
  174. #define DBG_UDP_PORT     0x7563
  175.  
  176. #define    DBG_EXCEPTION_NAMES {        \
  177.     "Interrupt",            \
  178.     "TLB Mod",                \
  179.     "TLB LD miss",            \
  180.     "TLB ST miss",            \
  181.     "TLB load address error",        \
  182.     "TLB store address error",        \
  183.     "TLB ifetch bus error",        \
  184.     "TLB load or store bus error",    \
  185.     "System call",            \
  186.     "Breakpoint trap",            \
  187.     "Reserved instruction",        \
  188.     "Coprocessor unusable",        \
  189.     "Overflow"                \
  190. }                    
  191.  
  192. /*
  193.  * Variable that is set to true when we are called through the DBG_CALL macro.
  194.  */
  195. extern    Boolean    dbgPanic;
  196.  
  197. /*
  198.  * Macro to call the debugger from kernel code.
  199.  */
  200. extern    void Dbg_Call _ARGS_((void));
  201. #define DBG_CALL    dbgPanic = TRUE; Dbg_Call();
  202.  
  203. /*
  204.  * Info returned when GETSTOPINFO command is submitted.
  205.  */
  206. typedef struct {
  207.     int            codeStart;
  208.     int            trapType;
  209.     Mach_RegState    regs;
  210. } StopInfo;
  211.  
  212. #ifdef KERNEL
  213. extern    void    Dbg_Init _ARGS_((void));
  214. extern    void    Dbg_InputPacket _ARGS_((Address packetPtr, int packetLength));
  215. extern    Boolean    Dbg_InRange _ARGS_((unsigned int addr, int numBytes,
  216.                     Boolean writeable));
  217. extern    unsigned    Dbg_Main _ARGS_((void));
  218.  
  219. extern Boolean
  220.     Dbg_ValidatePacket _ARGS_((int size, Net_IPHeader *ipPtr, int *lenPtr,
  221.                    Address *dataPtrPtr,
  222.                    Net_InetAddress *destIPAddrPtr,
  223.                    Net_InetAddress *srcIPAddrPtr,
  224.                    unsigned int *srcPortPtr));
  225. extern void
  226.     Dbg_FormatPacket _ARGS_((Net_InetAddress srcIPAddress,
  227.                  Net_InetAddress destIPAddress,
  228.                  unsigned int destPort, int dataSize,
  229.                  Address dataPtr));
  230. extern int    Dbg_PacketHdrSize _ARGS_((void));
  231. #endif
  232. #endif /* _DBG */
  233.